package com.smartleanx.module.hrm.service.programme;

import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.PageInfo;
import com.smartleanx.module.hrm.dal.dataobject.programme.*;
import com.smartleanx.module.hrm.dal.dataobject.programme.bo.*;
import com.smartleanx.module.hrm.dal.dataobject.programme.vo.HrmProgrammeUpdateVo;
import com.smartleanx.module.hrm.dal.dataobject.programme.vo.ProgrammeEmployeeVo;
import com.smartleanx.module.hrm.dal.dataobject.programme.vo.SystemChinaAreaVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author mybatis-plus
 * @since 2024-11-28
 */

public interface HrmProgrammeService {
    /**
     * 所有的城市
     */
    List<SystemChinaAreaVo> areaBySelect();

    List<JSONObject> insuranceBySelect(String name, Integer type, Integer state);

    List<JSONObject> roundUpBySelect(String name);

    List<JSONObject> accountBySelect(String name);

    Integer programmeSave(HrmProgrammeSaveBo hrmProgrammeSaveBo);

    HrmProgrammeUpdateVo selectInsertHX();

    PageInfo<HrmProgramme> selectProgramme(Integer cityId, String programmeName, Integer pageNum, Integer pageSize);

    Integer removeProgramme(Integer id);

    Integer updateState(Integer id,Integer state);
    List<JSONObject> programmeBySelect(Integer cityId);

    HrmProgrammeUpdateVo selectProgrammeHX(Integer ProgrammeId);

    Integer programmeUpdate(HrmProgrammeSaveBo hrmProgrammeSaveBo);


    PageInfo<ProgrammeEmployeeVo> selectProgrammeEmployeeBySelect(ProgrammeEmployeeBo programmeEmployeeBo);

    Integer insertProgrammeEmployee(ProgrammeEmployeeSaveBo programmeEmployeeSaveBo);

    Integer insertProgrammeEmployeeStop(ProgrammeEmployeeSaveBo programmeEmployeeSaveBo);

    JSONObject selectProgrammeEmployeeInfoListById(Integer employeeId);

    List<JSONObject> selectCompanySelect(String companyName);

    JSONObject importProgrammeEmployee(List<ProgrammeEmployeeSaveImportBo> programmeEmployeeSaveImportBos);

    PageInfo<HrmProgrammeCompany> selectPageList(Integer pageNum, Integer pageSize, String companyName);

    Integer insertCompany(HrmProgrammeCompany hrmProgrammeCompany);

    Integer updateCompany(HrmProgrammeCompany hrmProgrammeCompany);


    Integer updateState(HrmProgrammeCompany hrmProgrammeCompany);


    Integer removeCompany(Integer id);

    List<JSONObject> selectProgrammeZDAmount(Integer Id, Integer type);


    PageInfo<HrmProgrammeAccount> selectAccountPageList(Integer pageNum, Integer pageSize, String accountName);

    Integer insertAccount(HrmProgrammeAccount hrmProgrammeAccount);

    Integer updateAccount(HrmProgrammeAccount hrmProgrammeAccount);


    Integer updateAccountState(HrmProgrammeAccount hrmProgrammeAccount);


    Integer removeAccount(Integer id);




    PageInfo<HrmProgrammeInsurance> selectInsurancePageList(Integer pageNum, Integer pageSize, String name, Integer type);

    Integer insertInsurance(HrmProgrammeInsurance hrmProgrammeInsurance);

    Integer updateInsurance(HrmProgrammeInsurance hrmProgrammeInsurance);


    Integer updateInsuranceState(HrmProgrammeInsurance hrmProgrammeInsurance);


    Integer removeInsurance(Integer id);


    HrmProgrammeEmployee selectProgrammeEmployeeInfoById(Integer programmeId);


    Integer programmeEmployeeInfoUpdateById(HrmProgrammeEmployeeUpdateBo hrmProgrammeEmployeeUpdateBo);

    Integer programmeEmployeeInfoCx(HrmProgrammeEmployeeUpdateBo hrmProgrammeEmployeeUpdateBo);

    JSONObject selectByEmployee(Integer employeeId);

    List<JSONObject> selectGRHJAmount(String month);

    PageInfo<JSONObject> selectAccountCompanyBill(String month, String companyName, Integer pageNum, Integer pageSize);

    PageInfo<JSONObject> selectZDByEmployeeBill(String month, String companyName, Integer pageNum, Integer pageSize);

    PageInfo<JSONObject> selectZDByEmployeeAndCompany(String month, Integer pageNum, Integer pageSize, Integer companyId);

    Map selectByEmployeeIdZdMX(Integer employeeId, String month);

    JSONObject generateEmployeeIdZdMX(Integer employeeId, String month, Integer pEmployeeId,Integer aEmployeeId);


    String getRemark(Integer id);

    JSONObject generateRecord(Integer employeeId, String month);

    Integer updateRemark(Integer id, String remark);

    void updateEmployeeZdMX(JSONObject jsonObject);
}